Mysql 逻辑架构

1. 逻辑架构

2. 逻辑架构说明

连接器(Connectors)

也就是mysql的 连接驱动

系统管理和控制工具(Management Serveices & Utilities

连接池(Connection Pool)

SQL Layer MySQL业务层

SQL接口(SQL Interface)

接收SQL DML DDL

解析器(Parser)

select * from t1

  • 词法分析 分词: 形成成语法树

  • 语法分析 分析 : 符合SQL的语法 SQL的语法 : SQL 92 limit MYSQL自己的语法elect * from t1 语法错误 sytnx error ..

形成正确语法树

查询优化器(Optimizer**)

mysql 觉得你写的SQL 不是完美的优化什么呢?

  • 索引优化

索引 只使用一个 使用最优

  • 多表关联优化

    应该是小表关联大表,类似两层for循环一样

  • where 优化

    从左到右 MySQL 找过滤力度最大的 先执行

where id=1 and sex=’男’ where sex=’男’ and id=1 explain

从右到左 Oracle

查询缓存(Cache和Buffer)

把查询结果存起来

SQL — > hash后的值 唯一 则 表示

注意:SQL hash值是优化后的sql进行hash

存储引擎(Pluggable Storage Engines)

以表为单位,创建表时,指定存储引擎

creat table xxx() engine=InnoDB/Memory/MyISAM

MySQL的存储引擎是针对表进行指定的。(engine=InnoDB\myisam)

3. 存储引擎说明

存储引擎 说明
MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行**锁**、支持3种不同的存储格式。包括静态型、动态型和压缩型。
InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定事务处理回滚崩溃修复能力多版本并发控制的事务安全,比MyISAM处理速度稍慢、支持外键(FOREIGN KEY
ISAM MyISAM的前身,MySQL5.0以后不再默认安装
MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用
Memory 内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失,比如临时表,就是放在内存中的
Falcon 一种新的存储引擎,支持事物处理,传言可能是InnoDB的替代者
Archive 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作
CSV CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

4. InnoDB和MyISAM存储引擎区别

Innodb Myisam
存储文件 .frm 表定义文件
.ibd 数据文件和索引文件
.frm 表定义文件
.myd 数据文件
.myi 索引文件
表锁、行锁 表锁
事务 支持 不支持
CRDU 读、写 读多
count 扫表(count(1)) 专门存储的地方 (加where也扫表)
索引结构 B+ Tree B+ Tree
外键 支持 不支持

注意:从上表中可以看出,InnoDB存储引擎,数据文件和索引文件在一个文件中;而MyIsam存储的索引文件和数据文件是分开的。

5. 存储引擎的选型:

InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比 较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度, 对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。(比的应用如临时表)

注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎

6. 如何查看数据库默认的存储引擎

查看当前数据库支持的存储引擎,使用如下命令:

1
show engines;

查看数据库默认使用的存储引擎: InnoDB

1
show variables like '%storage_engine%';

# MySql
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×